package modele;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Transient;



/**
 * 
 */

@Entity
@Table(name="ligne_de_commande")
public class LigneCommande extends AbstractModelObject{

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	/**
	 * @uml.property  name="produit"
	 */
	@OneToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="produit_fk" , nullable=false)
	private Produit produit;
	
	// @ManyToOne
	 //   @JoinColumn(name="lignecommande_fk", insertable=false, updatable=false)
	 @Transient
	private Commande commande;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public Commande getCommande() {
		return commande;
	}

	public void setCommande(Commande commande) {
		this.commande = commande;
	}

	/**
	 * Getter of the property <tt>produit</tt>
	 * @return  Returns the produit.
	 * @uml.property  name="produit"
	 */
	public Produit getProduit() {
		return produit;
	}

	/**
	 * Setter of the property <tt>produit</tt>
	 * @param produit  The produit to set.
	 * @uml.property  name="produit"
	 */
	public void setProduit(Produit produit) {
		Produit oldValue = this.produit;
		this.produit = produit;
		firePropertyChange("produit", oldValue, this.produit);
	}

	/**
	 * @uml.property  name="quantit�"
	 */
	private int quantite;

	/**
	 * Getter of the property <tt>quantit�</tt>
	 * @return  Returns the quantit�.
	 * @uml.property  name="quantit�"
	 */
	public int getQuantite() {
		return quantite;
	}

	/**
	 * Setter of the property <tt>quantit�</tt>
	 * @param quantit�  The quantit� to set.
	 * @uml.property  name="quantit�"
	 */
	public void setQuantite(int quantite) {
		
		int oldValue = this.quantite;
		this.quantite = quantite;
		firePropertyChange("quantite", oldValue, this.quantite);
	}

	
			public LigneCommande(Produit produit, int quantite){
				this.produit=produit;
				this.quantite=quantite;
				setTotal(getTotal());
	
			}
			public LigneCommande(){
				
			}

			/** 
			 * @uml.property name="total"
			 */
			private float total;

			/** 
			 * Getter of the property <tt>total</tt>
			 * @return  Returns the total.
			 * @uml.property  name="total"
			 */
			public float getTotal() {
				total= (float) (produit.getPrix()*quantite);
				return total;
			}

			/** 
			 * Setter of the property <tt>total</tt>
			 * @param total  The total to set.
			 * @uml.property  name="total"
			 */
			public void setTotal(float total) {
				float oldValue = this.total;
				this.total=total;
				firePropertyChange("total", oldValue, this.total);
			}

}
